package com.le.enhance.class7;

import org.junit.Test;

/**
 * 判断一个32位正数是不是2的幂、4的幂
 */
public class Code_02_Power {
    // 如果是2的幂,则只有一个1,与n-1为0

    //  1     2    4    8    16
    // 0001, 0010,0100, 1000,010000 n
    //       &
    // 0000, 0001,0011, 0111,001111 n -1
    // 0      0    0     0     0
    public static boolean is2Power(int n) {
        return (n & (n - 1)) == 0;
    }

    // 先判断是否是2的幂
    //             4    16     64
    // 4的幂有:  00100,010000,010000000
    //           &
    //01010101010101010101010101010101
    // 必不为0
    public static boolean is4Power(int n) {
        return (n & (n - 1)) == 0 && (n & 0x55555555) != 0;
    }

    @Test
    public void test() {
//        System.out.println(is2Power(16));
        System.out.println(is4Power(5));
    }
}
